iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0
自我挑戰組

Tensorflow學習日記系列 第 12

tensorflow學習日記Day12* 多元感知器模型預處理、建立、訓練

  • 分享至 

  • xImage
  •  

#資料預處理
#匯入所需模組
from keras.utils import np_utils
import numpy as np
np.random.seed(10)
#讀取mnist資料
from keras.datasets import mnist
(x_train_image,y_train_label),
(x_test_image,y_test_label)=mnist.load_data()
#將features(數字影像特徵值),使用reshape轉換:原本28x28的數字影像,以reshape轉換為784個float數字。
x_Train = x_train_image.reshape(60000,784).astype('float32')
x_Test = x_test_image.reshape(10000,784).astype('float32')
#將features(數字影像特徵值)標準化:提高模型預測的準確度,並更快收斂。
x_Train_normalize = x_Train / 255
x_Test_normalize = x_Test / 255
label(數字的真實值)以 One-hot encoding 轉換:使用np_uutils.to_categorical將label進行One-hot encoding轉換。
y_Train_OneHot = np_utils.to_categorical(y_train_label)
y_Test_OneHot = np_utils.to_categorical(y_test_label)

#建立模型
#匯入所需模組
from keras.models import Sequential
from keras.layers import Dense
#建立Sequential模型:建立一個線性堆疊模型,之後只需要用model.add()method,將各層神經網路加入。
model = Sequential()
#加入輸入層和隱藏層(隱藏層神經元數量為256,輸入神經元數量為784,使用normal distribution常態分佈的亂數初始化weight和bias,激活函數為relu)
model.add(Dense(units=256,input_dim=784,kernel_initializer='normal',activation='relu'))
#加入輸出層(輸出神經元數量為10個,使用normal distribution常態分佈的亂數初始化weight和bias,激活函數為softmax,不需要設定input_dim是因為這一層的input_dim就是上一層的units)
model.add(Dense(units=10,kernel_initializer='normal',activation='softmax'))
#輸出模型摘要
print(model.summary())

#訓練
#定義訓練方法(loss(損失函數)在深度學習通常使用categorical_crossentropy(交叉熵)訓練的效果會最好,optimizer(設定最優化方法)在深度學習中使用adam最優化方法可以讓訓練效果更快收斂,並且提高準確率,metrics設定評估模型的方法是accuracy準確率)
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
#開始訓練(features數字影像特徵值,label數字影像特徵值,設定參數,設定 epochs(訓練週期)為10次,每次200批資料,顯示訓練過程)
train_history = model.fit(x=x_Train_normalize,y = y_Train_OneHot,validation_split=0.2,epochs = 10,batch_size=200,verbose=2)

validation_split=0.2:因為總共有60000筆資料,所以會分成60000x0.8=48000為訓練資料60000x0.2=12000為驗證資料
使用48000筆資料訓練,分成200筆資料一次,所以大概會分成240批。
模型摘要:
https://scontent.ftpe8-1.fna.fbcdn.net/v/t1.15752-9/70973586_905014376549959_7125265802495787008_n.png?_nc_cat=109&_nc_oc=AQmpoR5RBKeklHC0eBt6TOvnbqkrnYPTrxoXEcDDs3KMX8C0mApKMnMItiV3-Sb23cY&_nc_ht=scontent.ftpe8-1.fna&oh=9014ad10da15ccb4f8ee94a152b1405f&oe=5E3817E4
256個神經元的隱藏層,10個神經元的輸出層。
Param的計算方法:上一層神經元數量x本層神經元數量+本層神經元數量(因為輸入層和隱藏層公式為https://chart.googleapis.com/chart?cht=tx&chl=h1%3Drelu(x*w1%2Bb1),而輸出層公式為https://chart.googleapis.com/chart?cht=tx&chl=y%3Dsoftmax(h1*w2%2Bb2)
從上表可以得知:
隱藏層的Param是200960因為784x256+256=200960
輸出層的Param是2570因為256x10+10=2570
必須訓練的Trainable Params(超參數)為200960+2570=203530
通常Trainable Param 越大,模型越複雜,所需的訓練時間也越長。

訓練結果:
https://scontent.ftpe8-3.fna.fbcdn.net/v/t1.15752-9/71344525_2147992698826709_7743683871270502400_n.png?_nc_cat=106&_nc_oc=AQkRRmqaqs1J20qgxWBQR49bNjSUxKn1TmfioiR1HJahDkfOaxdV50uGV-P7GBb4-ZY&_nc_ht=scontent.ftpe8-3.fna&oh=3702033e892cf274676694dea9b6c963&oe=5E326F65
從上表可以看出loss誤差越來越小,準確率越來越高

全部打完之後發現之前遇到的問題也一起解決了,結論是終端機跳的error一定要看清楚。


上一篇
tensorflow學習日記Day11 多元感知器模型建立
下一篇
tensorflow學習日記Day13* 多元感知器模型預測
系列文
Tensorflow學習日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言